import { actions } from "mirrorx";
// 引入services，如不需要接口请求可不写
import * as api from "./service";
import { Message } from 'tinper-bee';
// 接口返回数据公共处理方法，根据具体需要
import { processData, processData1 } from "utils";

/**
 *          btnFlag为按钮状态，新增、修改是可编辑，查看详情不可编辑，
 *          新增表格为空
 *          修改需要将行数据带上并显示在卡片页面
 *          查看详情携带行数据但是表格不可编辑
 *          0表示新增、1表示修改，2表示查看详情 3提交
 *async loadList(param, getState) {
 *          rowData为行数据
 */

export default {
    // 确定 Store 中的数据模型作用域
    name: "ApprovalModel1",
    initialState: {
        showLoading: false,
        findUniqueObj:{},
        billBpmObj:{}
    },
    reducers: {
        /**
         * 纯函数，相当于 Redux 中的 Reducer，只负责对数据的更新。
         * @param {*} state
         * @param {*} data
         */
        updateState(state, data) {
            //更新state
            return {
                ...state,
                ...data
            };
        }
    },
    effects: {
        /**
         *参照--请求列表----
         * @param {*} param
         * @param {*} getState
         */

        // 参照--请求列表----
        async getFindUnique(param, getState) {
            // 调用 getList 请求数据
            actions.ApprovalModel1.updateState({
                showLoading: true,
            });
            let res = await api.getFindUnique(param);
            if(res.data){
                actions.ApprovalModel1.updateState({
                    showLoading: false,
                    findUniqueObj:res.data
                });
                param.callback(res.data)
            }
        },

        async getBillBpm(param, getState) {
            // 调用 getList 请求数据
            actions.ApprovalModel1.updateState({
                showLoading: true,
            });
            let res = await api.getBillBpm(param);
            if(res.data){
                actions.ApprovalModel1.updateState({
                    showLoading: false,
                    billBpmObj:res
                });
                if(res.data.msg) {
                    Message.create({ content:  res.data.msg || "查找单据主键对应的流程定义报错", color: 'warning', duration: 3 });
                    return;
                }
                if(res.data.message == "NoBpm") {
                    Message.create({ content: "未找到单据主键对应的流程定义", color: 'warning', duration: 3 });
                    return;
                }
                if(res.data.message == "NoTask") {
                    Message.create({ content: "未找到单据主键对应的流程任务", color: 'warning', duration: 3 });
                    return;
                }
                let bpmparam = {
                    processDefinitionId: res.data.processDefinitionId,
                    processInstanceId: res.data.processInstanceId
                }
                await api.getHisTasklist(bpmparam);
                await api.getProcessInstancediagram(bpmparam);
                await api.getHighlightsprocessInstance(bpmparam);
                param.callback(res.data);
            }
        },

        async onSubmit(param, getState) {
            // 调用 getList 请求数据
            actions.ApprovalModel1.updateState({
                showLoading: true,
            });
            let res = processData(await api.onSubmit(param),"提交成功") 
            if(res) {
                actions.ApprovalModel1.updateState({
                    showLoading: false,
                });
                param.callback();
            }
        },
        async onCallback(param, getState) {
            // 调用 getList 请求数据
            actions.ApprovalModel1.updateState({
                showLoading: true,
            });
            let res = processData(await api.onCallback(param),"收回成功"); 
            if(res) {
                actions.ApprovalModel1.updateState({
                    showLoading: false,
                });
                param.callback();
            }
        },
        async onApprove(param, getState) {
            // 调用 getList 请求数据
            actions.ApprovalModel1.updateState({
                showLoading: true,
            });
            let res = await api.onApprove(param);
            if(res.data && res.data.flag == "success") {
                Message.create({ content: res.data.msg || "审批成功", color: 'success', duration: 3 });
                actions.ApprovalModel1.updateState({
                    showLoading: false,
                });
                param.callback();
            }else {
                Message.create({ content: res.data.msg || "审批失败", color: 'success', duration: 3 });
                actions.ApprovalModel1.updateState({
                    showLoading: false,
                });
                param.callback();
            }

        },
        async onCancelApprove(param, getState) {
            // 调用 getList 请求数据
            actions.ApprovalModel1.updateState({
                showLoading: true,
            });
            let res = processData(await api.onCancelApprove(param));
            if(res) {
                actions.ApprovalModel1.updateState({
                    showLoading: false,
                });
                param.callback();
            }
        }
    }

};
